reader: io.BufferReader = null;
fileHeaders: headers.PEFileHeaders = null;
clrDirectory: metadata.ClrDirectory = null;
clrMetadata: metadata.ClrMetadata = null;
metadataStreams: metadata.MetadataStreams = null;
tableStream: metadata.TableStream = null;
constructor(public appDomain: AppDomain) { read(reader: io.BufferReader): Assembly { this.readMetadataStreams();
this.populateStrings(this.tableStream.stringIndices, reader);
var mscorlib = this._getMscorlibIfThisShouldBeOne();
this.tableStream.tables[metadata.TableKind.Assembly][0].def = mscorlib;
return this._createAssemblyFromTables();
private _createAssemblyFromTables() { var stringIndices = this.tableStream.stringIndices;
var assembly = this._getMscorlibIfThisShouldBeOne();
var replaceMscorlibTypes = assembly ? assembly.types.slice(0, assembly.types.length) : null;
var referencedAssemblies: Assembly[] = [];
var assemblyRefTable: tables.AssemblyRef[] = this.tableStream.tables[0x23];
for (var i = 0; i < assemblyRefTable.length; i++) { var assemblyRefRow = assemblyRefTable[i];
var assemblyRefName = stringIndices[assemblyRow.name];
var assemblyRefVersion = assemblyRow.majorVersion + "." + assemblyRow.minorVersion + "." + assemblyRow.revisionNumber + "." + assemblyRow.buildNumber;
var assemblyRefAttributes = assemblyRow.flags;
var assemblyRefPublicKey = this._readBlobHex(assemblyRow.publicKey);
var assemblyRefCulture = stringIndices[assemblyRow.culture];
var referencedAssembly = this.appDomain.resolveAssembly(
if (referencedAssembly.isSpeculative)
referencedAssembly.attributes = assemblyRefAttributes;
referencedAssemblies.push(referencedAssembly);
for (var i = 0; i < typeDefTable.length; i++) { var typeDefRow: tables.TypeDef = typeDefTable[i];
var typeName = stringIndices[typeDefRow.name];
var typeNamespace = stringIndices[typeDefRow.namespace];
if (replaceMscorlibTypes && typeNamespace === "System") { for (var ityp = 0; ityp < replaceMscorlibTypes.length; ityp++) { var typ = replaceMscorlibTypes[ityp];
if (typ.name === typeName) {